//注册窗口

#ifndef REGISTERDIALOG_H
#define REGISTERDIALOG_H

#include <QDialog>
#include <QJsonObject>
#include <QTimer>
#include <functional>

#include "netglobal.h"

namespace Ui {
class RegisterDialog;
}

//注册窗口
class RegisterDialog : public QDialog
{
    Q_OBJECT

public:
    explicit RegisterDialog(QWidget *parent = nullptr);
    ~RegisterDialog();

private slots:
    // 获取验证码按钮槽函数
    void on_get_code_btn_clicked();

    // http 注册消息槽函数
    void slot_reg_mod_finish(ReqId id, ErrorCode err, QString res);

    //注册确认按钮槽函数
    void on_confirm_btn_clicked();

    //返回登录界面槽函数
    void on_back_btn_clicked();

    //取消登录按钮槽函数
    void on_cance_btn_clicked();

private:
    void _SetConnect();

    void _SetWidgetState();

    //error_tipe_label 根据状态显示内容
    void _ShowTip(QString str, bool ok);

    //初始化 ReqId 对应的回调函数
    void _InitHttpHandlers();

    void _AddTipErr(TipErr code, QString msg);
    void _DelTipErr(TipErr code);
    // 输入框错误检测
    void _CheckUserValid();
    void _CheckEmailValid();
    void _CheckPassValid();
    void _CheckConfirmValid();
    void _CheckVarifyValid();

    //切换注册成功页面
    void _ChangeTipPage();

private:
    Ui::RegisterDialog *ui;

    int _countdown;             //返回登录定时时间
    QTimer* _countdown_timer;    //返回登录定时器
    QMap<TipErr, QString> _error;   //存储错误信息
    QMap<ReqId, std::function<void(const QJsonObject&)>> _handlers;   //记录ReqId对应的回调函数

signals:
    void sigSwitchLogin();
};

#endif // REGISTERDIALOG_H
